package cn.edu.sdufe.sn20180664257;

import android.content.res.Resources;
import android.content.res.TypedArray;
import android.support.annotation.IdRes;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.GetChars;
import android.view.View;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 安卓第三次作业
 * Written by Fuhai Chen
 * Part of idea came from Ren
 */

public class Activity_hm3 extends AppCompatActivity {

    /**
     * 考虑一下我们需要什么变量（以及组件）
     * @param savedInstanceState
     */

    private RadioButton radioButton1, radioButton2, radioButton3, radioButton4;
    private RadioGroup radioGroup;
    private TextView alter_message, tv_title;
    private int[] testAnsware;
    private String[] testTitle;
    private TypedArray typedArray;
    private int rightCounts, counts, index, length, index2, t = 0;

    /**
     * 初始化操作
     * 流程分析；
     * 1、获取个组件与资源
     * 2、获取初始化参数（题目的数量）
     * 3、隐藏按钮组件
     * 4、开始答题（相应内部监听器实现）
     * @param savedInstanceState
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_homework3);  //加载布局文件
        getArrayAndView();  //获取数组资源以及相应组件
        length = testTitle.length;   //获取题目总数目，即储存题目的数组length
        radioGroup.setVisibility(View.GONE);    //隐藏单选按钮组件（注意是对radioGroup进行操作）

        //通过匿名内部类实现开始按钮的事件监听者
        findViewById(R.id.homework3_button).setOnClickListener(new View.OnClickListener() {
            /**
             * 开始答题的初始化操作
             * 流程分析：
             * 1、显示上一步隐藏的单选框
             * 2、开始计时
             * 3、加载并显示相应题目
             * @param v
             */
            @Override
            public void onClick(View v) {
                radioGroup.setVisibility(View.VISIBLE); //显示radioGroup组件
                tv_title.setVisibility(View.VISIBLE);   //显示tv_title组件
                final long beginTime = System.currentTimeMillis();  //获取当前时间
                //参数初始化操作（针对于答题中点击开始按钮的情况）
                rightCounts = 0;
                counts = 0;
                index = 0;
                index2 = 0;

                //加载并显示题目信息和选项信息（这里调用自定义的方法）
                displayTitleAndOption();
                radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
                        switch (checkedId) {
                            case R.id.rbt1:
                                t = 1;
                            case R.id.rbt2:
                                t = 2;
                            case R.id.rbt3:
                                t = 3;
                            case R.id.rbt4:
                                t = 4;
                                //判断题目是否回答正确
                                if (t == testAnsware[index2 ++]) rightCounts++;
                                /**
                                 * 答题结束
                                 * 1、计时结束
                                 * 2、隐藏题目信息
                                 * 3、显示结果信息
                                 */
                                if (index == length - 1){
                                    tv_title.setVisibility(View.GONE);  //隐藏题目信息
                                    radioGroup.setVisibility(View.GONE);    //隐藏选项信息
                                    long endTime = System.currentTimeMillis();  //获取答题结束时的系统时间
                                    long time = (endTime - beginTime);  //累计用时
                                    String stime = "您答对了" + rightCounts + "个题，答错了" + (length - rightCounts) + "题，耗时" + time/1000 + "秒" ;
                                    Toast.makeText(Activity_hm3.this, stime + "", Toast.LENGTH_LONG).show();
                                }
                                //选中radioButton时进行的操作
                                radioGroup.clearCheck();
                                index++;
                                displayTitleAndOption();
                                break;
                        }
                    }
                });
            }
        });
    }


    /**
     * 获取数组资源和根据id获得组件的方法
     * 这里单独拿出来定义，使方法代码块复用，减少代码篇幅
     */
    public void getArrayAndView(){
        Resources resources = getResources();   //直接使用getResources()得到resource实例
        testTitle = resources.getStringArray(R.array.testTitle);    //获取储存题目的数组
        typedArray = resources.obtainTypedArray(R.array.testOptionAll); //获取储存选项数组的外层数组
        testAnsware = resources.getIntArray(R.array.anwser);    //获取存储答案的数组
        radioButton1 = (RadioButton) findViewById(R.id.rbt1);   //根据id获取相应组件
        radioButton2 = (RadioButton) findViewById(R.id.rbt2);
        radioButton3 = (RadioButton) findViewById(R.id.rbt3);
        radioButton4 = (RadioButton) findViewById(R.id.rbt4);
        radioGroup = (RadioGroup) findViewById(R.id.homework3_rg1);
        tv_title = (TextView) findViewById(R.id.homework3_tv2);
        alter_message = (TextView) findViewById(R.id.homework3_tv1);

    }

    /**
     * 封装加载并显示题目信息和选项信息的方法 调用储存选项的数组，然后回写至页面的Textview以及Radiobutton
     */
    public void displayTitleAndOption(){
        //设置已答题目等提示信息并显示至Textview
        String string = "您已回答 " + counts++ + " 题,还剩 " + (length + 1 - counts) + " 题";
        alter_message.setText(string);
        if (index >= length) return; //如果答题完成（题目数组遍历完毕），则退出方法（直接写个return即可）
        //设置题目信息
        tv_title.setText(testTitle[index]);
        //分别设置选项信息
        radioButton1.setText(typedArray.getTextArray(index)[0].toString());
        radioButton2.setText(typedArray.getTextArray(index)[1].toString());
        radioButton3.setText(typedArray.getTextArray(index)[2].toString());
        radioButton4.setText(typedArray.getTextArray(index)[3].toString());
    }

}
